/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package clases;

import java.sql.Connection;
import clases.conexion;
import com.sun.org.apache.bcel.internal.generic.TABLESWITCH;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author CoLiSa
 */
public class ConversorRSaDefaultTableModel {
        

public void Conectar(){
        try{
            mdbc = new conexion();
            mdbc.init();
            Connection conn= mdbc.getMyConnection();
            stmt = conn.createStatement();
        }catch(Exception ex)
        {
            JOptionPane.showMessageDialog(null, "Problemas al concetarse a la Base de Datos","Error",JOptionPane.ERROR_MESSAGE);
        }
    }   

 
   


public static void completar(ResultSet rs, DefaultTableModel modelo) {
        try {
            // Se obtiene los metadatos de la consulta. Con ellos
            // podemos obtener el número de columnas y el nombre de las mismas.
            ResultSetMetaData metadatos = rs.getMetaData();

            // Se obtiene el número de columnas.
            int numeroColumnas = metadatos.getColumnCount();

            // Se crea un array de etiquetas para rellenar
            Object[] etiquetas = new Object[numeroColumnas];

            // Se obtiene cada una de las etiquetas para cada columna
            for (int i = 0; i < numeroColumnas; i++) {
                // Nuevamente, para ResultSetMetaData la primera columna es la 1.
                etiquetas[i] = metadatos.getColumnLabel(i + 1);
            }

            // Se meten las etiquetas en el modelo. 
            // El numero de columnas se ajusta automáticamente.
            modelo.setColumnIdentifiers(etiquetas);
            
            //Borramos todas las filas del modelo en caso de encontrar alguna
            while (modelo.getRowCount() > 0) {
                modelo.removeRow(0);
            }            
 
            // Añadimos al DefaultTableModel las filas correspondientes al ResultSet.
            while (rs.next()) {
                // Se crea un array que será una de las filas de la tabla.
                Object[] fila = new Object[numeroColumnas]; // numeroColumnas tiene la cantidad de columnas de la consulta.

                // Se rellena cada posición del array con una de las columnas de la tabla en base de datos.
                for (int i = 0; i < numeroColumnas; i++) {
                    fila[i] = rs.getObject(i + 1); // El primer indice en rs es el 1, no el cero, por eso se suma 1.
                }
                // Se añade al modelo la fila completa.
                modelo.addRow(fila);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
        
        
    }
    
    
    public void EstadisticaEstadoAnimal(JTable Tabla){
         /*String  columnNames[] = { "id Estado","Estado Animal","Total","Porcentaje" };
        Class classes[] =   { java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Float.class};
        boolean editable[] = new boolean [] { false, false, false, false };
       DefaultTableModel modelo = new DefaultTableModel(Tabla);*/
            DefaultTableModel modelo = new DefaultTableModel();
            Tabla.setModel(modelo);
            Tabla.setAutoResizeMode(Tabla.AUTO_RESIZE_OFF);
             String comando= "select b.idestadoanimal , e.descripcion , count(*) as total, "
                + " round(((count(*)  * 100)/ (select count(*) from bovino where b.idestadoanimal<=4)),2) as porcentaje"
                + " from bovino b , estadoanimal e where b.idestadoanimal>=0 and b.idestadoanimal<=4 "
                + "and b.idestadoanimal= e.idestadoanimal and b.sexo='H'group by b.idestadoanimal";
     
            try 
            { 
               Conectar();
               
            ResultSet rs = stmt.executeQuery(comando);
/*            modelo.addColumn("Id Estado");
            modelo.addColumn("Descripción");
            modelo.addColumn("Total");
            modelo.addColumn("Porcentaje");*/
            
            
        Tabla.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null,"Sin control", null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
           

            },
            new String [] {
                "Id Estado", "Descripcion", "Total", "Porcentaje"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
            
            
            
                Tabla.getColumnModel().getColumn(0).setMinWidth(80);
                Tabla.getColumnModel().getColumn(1).setMinWidth(200);
                Tabla.getColumnModel().getColumn(2).setMinWidth(190);
                Tabla.getColumnModel().getColumn(3).setMinWidth(190);
                
                
                int pos=0;
                        
                
                while(rs.next())
            {
                Object[] valor = new Object[19];
                for(int i=0; i<4; i++)
                {
                        valor[i] = rs.getString(i+1);
                        if (valor[i].equals("default"))
                            valor[i]="Sin control";                
                           
                            }
                
                Tabla.setValueAt(valor[0],pos,0);
                Tabla.setValueAt(valor[1],pos,1);
                Tabla.setValueAt(valor[2],pos,2);
                Tabla.setValueAt(valor[3],pos,3);
                 pos=pos+1;       
            }
            
            
        
        }
        catch(Exception e) { JOptionPane.showMessageDialog(null, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); }
          
   

}
 
    
    private conexion mdbc;
    private Statement stmt;
}